import { provide, inject, reactive, readonly as defineReadonly } from "vue";

/** 创建依赖注入 */
export function createContext(context, key = Symbol(), options = {}) {
  // 是否只读 ，是否创建注入 ，是否使用原始数据
  const { readonly = true, createProvider = true, native = false } = options;

  // 建立响应式数据
  const state = reactive(context);

  // 创建只读数据
  const provideData = readonly ? defineReadonly(state) : state;

  // 提供依赖注入
  createProvider && provide(key, native ? context : provideData);

  return { state };
}

/** 使用依赖注入数据 */
export function useContext(key, defaultValue) {
  return inject(key, defaultValue || {});
}
